package com.cloudsea.yunhaistores.controller;

import cn.dev33.satoken.stp.SaTokenInfo;
import com.cloudsea.yunhaistores.dto.LoginDTO;
import com.cloudsea.yunhaistores.dto.MerchantInfoDTO;
import com.cloudsea.yunhaistores.dto.MerchantRegisterDTO;
import com.cloudsea.yunhaistores.service.MerchantService;
import com.cloudsea.yunhaiutils.common.ApiResponse;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Tag(name = "商户管理", description = "用于商户的注册、信息查询、更新等操作") // <<< 添加 Tag 注解，用于分组
@RestController
@RequestMapping("/merchants")
public class MerchantController {
    @Autowired
    private MerchantService merchantService;

    @Operation(summary = "商户注册", description = "提供商户名称、手机号和密码进行新商户的注册")
    @PostMapping("/register")
    public ApiResponse<Void> register(@Valid @RequestBody MerchantRegisterDTO dto) {

        merchantService.register(dto);

        return ApiResponse.success("注册成功，请等待平台审核！", null);
    }

    /**
     * 商户登录接口
     * @param dto 包含用户名和密码的DTO
     * @return 包含Token信息的标准响应
     */
    @Operation(summary = "商户登录", description = "使用用户名和密码获取访问令牌(Token)")
    @PostMapping("/login")
    public ApiResponse<SaTokenInfo> login(@Valid @RequestBody LoginDTO dto) {
        // 调用 Service 层的登录逻辑
        SaTokenInfo tokenInfo = merchantService.login(dto);

        // 将获取到的 Token 信息包装在 ApiResponse 中返回给前端
        return ApiResponse.success("登录成功", tokenInfo);
    }

    /**
     * 获取当前登录的商户用户信息
     * @return 包含用户和商户信息的DTO
     */
    @Operation(summary = "获取当前登录用户信息", description = "需要提供有效的Token才能访问，用于获取当前操作员及其所属商户的基本信息")
    @GetMapping("/info")
    public ApiResponse<MerchantInfoDTO> getInfo() {
        MerchantInfoDTO merchantInfo = merchantService.getCurrentMerchantInfo();
        return ApiResponse.success(merchantInfo);
    }

    /**
     * 商户退出登录接口
     */
    @Operation(summary = "商户退出登录", description = "需要提供有效的Token才能访问，使当前Token失效")
    @PostMapping("/logout")
    public ApiResponse<Void> logout() {
        merchantService.logout();
        return ApiResponse.success("退出成功", null);
    }
}
